package esmaltes.bean;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.PersistenceException;

import esmaltes.model.Marca;
import esmaltes.repository.MarcaRepository;

@Named
@javax.faces.view.ViewScoped
public class CadastroConsultaMarcaBean extends TemplateBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private MarcaRepository marcaRepository;
	
	private Marca marca = new Marca();
	
	private List<Marca> marcas;
	private List<Marca> marcasFiltradas;
		
	private Marca marcaSelecionada;

	public void salvar() {
		
		Marca marcaDescExistente = marcaRepository.buscaPorDescricao(this.marca.getDescricao());
		
		if (marcaDescExistente != null && !marcaDescExistente.equals(this.marca)) {
			super.showFacesMessage("Já existe uma marca com a descrição informada.", 1);
		} else {
			try {
				
				this.marcaRepository.guardar(marca);
				this.marca = new Marca();
				super.showFacesMessage("Registro salvo com sucesso!", 2);
				
				consulta();
				
			} catch (Exception e) {
				
				super.showFacesMessage("Erro ao tentar salvar o registro.", 1);
				System.err.println("Erro: " + e.getMessage());
				
				consulta();
				
			}
		}
		
	}
	
	public void excluir() {
		Marca marcaExclusao = marcaRepository.getManager().merge(marcaSelecionada);
		
		try {
			
			marcaRepository.remover(marcaExclusao);
			marcas.remove(marcaSelecionada);
			super.showFacesMessage("Marca excluída com sucesso!", 2);
			
			consulta();
			
		} catch (PersistenceException pe) {
			
			super.showFacesMessage("Marca não pode ser excluída.", 1);
			System.err.println("Erro: " + pe.getMessage());
			
		} catch (Exception e) {
			
			super.showFacesMessage("Erro ao tentar excluir o registro.", 1);
			System.err.println("Erro: " + e.getMessage());
			
		}
		
	}

	public void consulta() {
		this.marcas = marcaRepository.todos("cd_marca");
	}

	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public List<Marca> getMarcas() {
		return marcas;
	}

	public void setMarcas(List<Marca> marcas) {
		this.marcas = marcas;
	}

	public List<Marca> getMarcasFiltradas() {
		return marcasFiltradas;
	}

	public void setMarcasFiltradas(List<Marca> marcasFiltradas) {
		this.marcasFiltradas = marcasFiltradas;
	}

	public Marca getMarcaSelecionada() {
		return marcaSelecionada;
	}

	public void setMarcaSelecionada(Marca marcaSelecionada) {
		this.marcaSelecionada = marcaSelecionada;
	}

}
